package main

import (
	"fmt"
	"math"
	"strings"
)

func main() {

	// rune (Unicode Code Point, int32的别名)
	// uintptr 以存储指针的uint32 或 uint64整数
	// 空值 nil

	// 八进制，十六进制及科学计数法。 标准库math定义了各数字类型取值范围
	a, b, c, d := 071, 0x1F, 1e9, math.MinInt16
	println(a, b, c, d)

	// 多行字符串
	remark := `第一行
		我是多行字符串
		第二行
	`
	println(remark)

	// 字符串常见操作
	name := "hepengju, hello"
	println(len(name),
		name+"add",
		strings.Split(name, ",")[0],
		strings.Contains(name, "he"),
		strings.HasPrefix(name, "he"),
		strings.HasSuffix(name, "he"),
		strings.Index(name, "he"),
		strings.LastIndex(name, "he"),
		strings.Join(strings.Split(name, ","), "|"),
	)

	// 字符
	e := '中'
	f := 'x'
	println(e, f)

	// 字符串按照字节和字符遍历
	str := "hello何鹏举"
	for i := 0; i < len(str); i++ { //byte
		fmt.Printf("%v(%c) ", str[i], str[i])
	}

	fmt.Println()
	for _, r := range str { //rune
		fmt.Printf("%v(%c) ", r, r)
	}
	fmt.Println()

	// 修改字符串: 先将其转换为[]rune 或 []byte, 再转换回来
	s1 := "hello"
	byteS1 := []byte(s1)
	byteS1[0] = 'H'
	fmt.Println(string(byteS1))

	s2 := "何鹏举"
	runeS2 := []rune(s2)
	runeS2[0] = '新'
	fmt.Println(string(runeS2))

	// 类型转换: Go语言只有强制类型转换，语法: T(表达式)
	l1, l2 := 3, 4
	l3 := int(math.Sqrt(float64(l1*l1 + l2*l2)))
	fmt.Println(l3)
}
